package com.dmgis.hndz.util;

import com.dmgis.hndz.pojoVo.ScopeRequest;

import java.awt.geom.Path2D;
import java.util.ArrayList;
import java.util.List;

public class LatitudeLongitude {

    /**
     * 使用Path2D创建一个多边形
     *
     * @param polygon 经纬度 集合
     * @return 返回Path2D.Double
     */
    private static Path2D.Double create(List<ScopeRequest> polygon) {
        //创建path2D对象
        Path2D.Double generalPath = new Path2D.Double();
        //获取第一个起点经纬度的坐标
        ScopeRequest first = polygon.get(0);
        //通过移动到以double精度指定的指定坐标，把第一个起点添加到路径中
        generalPath.moveTo(first.getLongitude(), first.getLatitude());
        //把集合中的第一个点删除防止重复添加
        polygon.remove(0);
        //循环集合里剩下的所有经纬度坐标
        for (ScopeRequest d : polygon) {
            //通过从当前坐标绘制直线到以double精度指定的新指定坐标，将路径添加到路径。
            //从第一个点开始，不断往后绘制经纬度点
            generalPath.lineTo(d.getLongitude(), d.getLatitude());
        }
        // 最后要多边形进行封闭，起点及终点
        generalPath.lineTo(first.getLongitude(), first.getLatitude());
        //将直线绘制回最后一个 moveTo的坐标来关闭当前子路径。
        generalPath.closePath();
        return generalPath;
    }


    /**
     * 判断点是否在区域内
     *
     * @param pointsList 区域经纬度
     * @param longitude  经度
     * @param latitude   纬度
     * @return 返回true跟false
     */
    public static boolean isPoint(String[] pointsList, double longitude, double latitude) {
        List<ScopeRequest> listScopeRequest = new ArrayList<>();
        for (int i = 0; i < pointsList.length; i = i + 2) {
            ScopeRequest scopeRequest = new ScopeRequest();
            scopeRequest.setLongitude(Double.valueOf(pointsList[i]));
            scopeRequest.setLatitude(Double.valueOf(pointsList[i + 1]));
            listScopeRequest.add(scopeRequest);
        }
        Path2D path2D = create(listScopeRequest);
        //true如果指定的坐标在Shape边界内; 否则为false 。
        if (path2D.contains(longitude, latitude)) {
            return true;
        }
        return false;
    }
}
